import Watcher from './observer/watch.js'
import { dispatch } from './vdom/dispatch.js'
export function lifecircleMixin(Vue) {
    // 更新
    Vue.prototype._update = function (vnode) {
        const vm = this
        // 替换结点 函数，每次更新完页面都要将原来的 $el 更新
        vm.$el = dispatch(vnode, vm.$el)
    }
}

export function mountComponent(vm, el) {
    // 调用 beforeMount 生命周期函数
    callHook(vm, 'beforeMount')

    // 每次挂载组件都要 更新 
    const updateComponent = () => {
        vm._update(vm._render())
    }
    new Watcher(vm, updateComponent, () => {
        callHook(vm, 'updated')
    }, true)

    // 调用 mounted 生命周期函数
    callHook(vm, 'mounted')
}

// 每个生命周期执行的函数
export function callHook(vm, hook) {
    const hanlders = vm.$options[hook]
    if (hanlders) {
        for (let i = 0; i < hanlders.length; i++) {
            hanlders[i].call(vm) //更改生命周期的this
        }
    }

}